package com.geek.ch03.game;

/**
 * @author chenmin
 * @desc TODO
 * @date 2025/9/3
 * 1、定义一个英雄类Hero，可以通过这个类创建英雄角色
 *  * 属性：
 *  *     游戏角色拥有昵称name，等级level，血量blood，攻击力power，防御力defence，种族kind，
 *  *     英雄 Equip（只能装3个英雄，初始没有英雄）。
 *  * 方法：
 *  *     游戏角色拥有基本攻击方法（拥有一定几率打出暴击）attack(Monster m)，
 *  *     死亡判定方法isDead()，
 *  *     添加装备的方法addEquip(Equip e)，
 *  *     获取角色信息的方法show()。
 *  *
 *  * 设计：
 *  * 1.关联关系  一对多关联英雄 Equip
 *  * 2.依赖关系  attack(Monster m) 、 addEquip(Equip e)
 */
public  class Hero extends Role{
    //调用Role的有参构造函数
    public Hero(String name,int level,int blood,String kind,int power,int defence){
        super(name,level,blood,kind,power,defence);
    }
    //一对多关联装备数
    private Equip[] equips=new Equip[3];
    //装备计数器
    private int index=0;

    //英雄攻击方法
    public void attack(Role role){
        int random=(int)(Math.random()*10+1);
        int block=0;//暴击为0
        if(random>6){
            block=random*5;//5倍暴击率
        }
        //计算本回合怪兽丢失血量=英雄攻击力+暴击率-怪兽防御力
        int blood=this.getPower()+block- role.getDefence();
        double a=Math.random();
        if(a<0.15){
            blood=0;
            System.out.println("对方闪避，攻击无效！");
        }else if (blood>0){
            role.setBlood(role.getBlood()-blood);
            System.out.println("本回合怪兽失血量为："+blood+"剩余血量为："+role.getBlood());
        }
    }

    //添加装备的方法addEquip(Equip e)，
    public void addEquip(Equip e ){
        if (index>=equips.length){
            System.out.println("装备已满");
            return;
        }

        //添加装备
        equips[index++]=e;
        //合并攻击力
        this.setPower(this.getPower()+e.getPower());
        //合并防御力
       this.setDefence(this.getDefence()+e.getDefence());

    }
}
